package q817_numComponents;

import CommonClass.ListNode;

import java.util.HashSet;
import java.util.Set;

public class Solution {
    /*
    链表组件
    可以直接通过set存储所有nums数字
    然后从链表头遍历至链表尾部
    每次发现一个在set中的节点，就进入循环判断至节点不在set中为止
    并维护一个sub
    每一次循环用用ans - sub 最后得到答案
     */
    public int numComponents(ListNode head, int[] nums) {
        int ans = nums.length;
        Set<Integer> set = new HashSet<>();
        for (int num : nums) set.add(num);

        while (head != null) {
            int sub = 0;
            while (head != null && set.contains(head.val)) {
                ans -= sub;
                ++sub;
                head = head.next;
            }
            if (head == null) break;
            else head = head.next;
        }
        return ans;
    }
}
